#ifndef OPENSSL_SM4_H
#define OPENSSL_SM4_H

#include <stdint.h>
#include <stddef.h>
#include <gmssl/sm4.h>

// 将GmSSL头文件的包含放在类型定义之后，避免类型冲突
#ifdef __cplusplus
extern "C"
{
#endif

    // 直接使用GmSSL的SM4定义和常量
    // SM4_BLOCK_SIZE, SM4_KEY 等已在 gmssl/sm4.h 中定义

    // 保留兼容函数接口，但内部直接使用GmSSL实现
    void SM4_set_key(const unsigned char *key, SM4_KEY *ks);

    void SM4_encrypt(const unsigned char *in, unsigned char *out, const SM4_KEY *ks);

    void SM4_decrypt(const unsigned char *in, unsigned char *out, const SM4_KEY *ks);

    void SM4_cbc_encrypt(const unsigned char *in, unsigned char *out, size_t len,
                         const SM4_KEY *ks, unsigned char *iv, int enc);

#ifdef __cplusplus
}
#endif

#endif /* OPENSSL_SM4_H */
